<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // new 做了什么
        //   创建且返回了一个对象
        //   改变了this指向   this -> 这个对象

        //   obj.constructor = 这个构造函数


        // 普通函数加了new之后，就叫做构造函数  --- 构造函数是用于创建对象的
        // 每一个函数都有成为构造函数的可能性 

        // 一般情况下，为了区分普通函数和构造函数，建议构造函数首字母大写

        // 构造函数在创建时
        //    变量变成了属性
        //    函数会变成方法
        //    this -> 实例化对象


        function fn() {
            console.log(1);
            console.log(this);
        }

        const res = fn() ;
        console.log(res) ;    // undefined


        const f1 = new fn() ;
        console.log(f1);    // {}

        console.log(f1.constructor === fn);



        // function ff(name) {
        //     const obj = {} ;
        //     obj.name = name ;
        //     return obj
        // }


        function ff(name) {
            // const obj = {} ;
            this.name = name ;
            this.say = function() {
                console.log('hi');
            }
            // return obj 
        }


        const f11 = new ff('cc') ;
        console.log(f11);

        const f12 = new ff('yy') ;
        console.log(f12);



    </script>
    
</body>
</html>